package com.zx._06_JVM.chapter_02_gc;


/**
 * @version v1.0
 * @Project: jvm_example
 * @Title: D7_SatckAllocation    分析逃逸-将对象创建在栈种
 * @Description:
 * @author: zhangxue
 * @date: 2018年9月16日下午8:15:40
 * @company: 未知
 * @Copyright: Copyright (c) 2015
 */
public class D7_SatckAllocation {

    private D7_SatckAllocation obj;

    /**
     * 方法返回D7_SatckAllocation对象，发生逃逸
     */
    public D7_SatckAllocation getInstance() {
        return this.obj == null ? new D7_SatckAllocation() : obj;
    }

    /**
     * 为成员变量赋值，发生逃逸
     */
    public void setObj() {
        this.obj = new D7_SatckAllocation();
    }

    /**
     * 对象的作用域仅在方法中，没有发生逃逸（对象呗分配到栈内存中）
     */
    public void useObj() {
        D7_SatckAllocation obj = new D7_SatckAllocation();
    }

    /**
     * 引用成员变量的值，发生逃逸
     */
    public void useObj2() {
        D7_SatckAllocation obj = getInstance();
    }
}
